<?php

include_once '../php/metier/SparqlResultset.php';

/**
 * A SPARQL client to get query results
 *
 * @author peyet
 */
class SparqlClient {
	private $endpoint;
	private $prefixes;
	
	public function __construct() {
		$this->endpoint = "localhost:3030/space/query";
		$this->prefixes = array();
	}
	
	public function query($requete) {
		// On ajoute les préfixes à la requête passée en paramètre
		$query = "";
		
		foreach ($this->prefixes as $prefix_name => $uri) {
			$query .= "PREFIX $prefix_name <$uri> ";
		}
		
		$query .= $requete;
		
		// On exécute la requête sur fuseki
		$url = $this->endpoint . "?query=" . urlencode($query) . "&output=json";
		
		$options=array(
			  CURLOPT_URL            => $url,
			  CURLOPT_RETURNTRANSFER => true,
			  CURLOPT_HEADER         => false
		);

		$curl=curl_init();

		curl_setopt_array($curl,$options);
		
		// On récupère le résultat de la requête dans la variable $result
		$response = curl_exec($curl);
		
		curl_close($curl);
		
		// On instancie le résultset à partir du json retourné par fuseki
		$json = json_decode($response);
		if ($json == null) {
			$resultset = null;
		} else {
			$resultset = new SparqlResultset(json_decode($response));
		}
		
		return $resultset;
	}
	
	public function addPrefix($prefix_name, $uri) {
		$this->prefixes[$prefix_name] = $uri;
	}
	
	public function hasPrefix($uri, $prefixName) {
		return strpos($uri, $this->prefixes[$prefixName]) !== FALSE;
	}
}
